/*
* Sun Public License Notice
*
* The contents of this file are subject to the Sun Public License
* Version 1.0 (the "License"). You may not use this file except in
* compliance with the License. A copy of the License is available at
* http://www.sun.com/
*
* The Original Code is Forte for Java, Community Edition. The Initial
* Developer of the Original Code is Sun Microsystems, Inc. Portions
* Copyright 1997-2000 Sun Microsystems, Inc. All Rights Reserved.
*/
package org.netbeans.core.windows.toolbars;
import java.util.Vector;
import java.util.Iterator;
/**
* Class ToolbarRow ...
*
* @author Libor Kramolis
*/
public class ToolbarRow {
ToolbarConfiguration toolbarConfig;
ToolbarRow prevRow;
ToolbarRow nextRow;
/**
* @associates ToolbarConstraints
*/
private Vector toolbars;
ToolbarRow (ToolbarConfiguration config) {
toolbarConfig = config;
toolbars = new Vector();
prevRow = nextRow = null;
}
void addToolbar (ToolbarConstraints tc) {
addToolbar2 (tc, toolbars.size());
}
void addToolbar (ToolbarConstraints newTC, int pos) {
int index = 0;
Iterator it = toolbars.iterator();
ToolbarConstraints tc;
while (it.hasNext()) {
tc = (ToolbarConstraints)it.next();
if (pos < tc.getPosition())
break;
index++;
}
addToolbar2 (newTC, index);
}
private void addToolbar2 (ToolbarConstraints tc, int index) {
if (toolbars.contains (tc))
return;
ToolbarConstraints prev = null;
ToolbarConstraints next = null;
if (index != 0) {
prev = (ToolbarConstraints)toolbars.elementAt (index - 1);
prev.addNextBar (tc);
tc.addPrevBar (prev);
}
if (index < toolbars.size()) {
next = (ToolbarConstraints)toolbars.elementAt (index);
tc.addNextBar (next);
next.addPrevBar (tc);
}
if ((prev != null) && (next != null)) {
prev.removeNextBar (next);
next.removePrevBar (prev);
}
tc.addOwnRow (this);
toolbars.insertElementAt (tc, index);
tc.updatePosition();
}
void removeToolbar (ToolbarConstraints tc) {
int index = toolbars.indexOf (tc);
ToolbarConstraints prev = null;
ToolbarConstraints next = null;
try {
prev = (ToolbarConstraints)toolbars.elementAt (index - 1);
prev.removeNextBar (tc);
} catch (ArrayIndexOutOfBoundsException e) { }
try {
next = (ToolbarConstraints)toolbars.elementAt (index + 1);
next.removePrevBar (tc);
next.setAnchor (ToolbarConstraints.NO_ANCHOR);
} catch (ArrayIndexOutOfBoundsException e) { }
if ((prev != null) && (next != null)) {
prev.addNextBar (next);
next.addPrevBar (prev);
}
toolbars.removeElement (tc);
if (prev != null) {
prev.updatePosition();
} else {
if (next != null) {
next.updatePosition();
}
}
}
Iterator iterator () {
return toolbars.iterator();
}
void setPrevRow (ToolbarRow prev) {
prevRow = prev;
}
ToolbarRow getPrevRow () {
return prevRow;
}
void setNextRow (ToolbarRow next) {
nextRow = next;
}
ToolbarRow getNextRow () {
return nextRow;
}
int getPrefWidth () {
if (toolbars.isEmpty())
return -1;
return ((ToolbarConstraints)toolbars.lastElement()).getPrefWidth();
}
boolean isEmpty () {
return toolbars.isEmpty();
}
int toolbarCount () {
return toolbars.size();
}
void updateBounds () {
Iterator it = toolbars.iterator();
ToolbarConstraints tc;
while (it.hasNext()) {
tc = (ToolbarConstraints)it.next();
tc.updateBounds();
}
}
void switchBars (ToolbarConstraints left, ToolbarConstraints right) {
int leftIndex = toolbars.indexOf (left);
int rightIndex = toolbars.indexOf (right);
ToolbarConstraints leftPrev = null;
ToolbarConstraints rightNext = null;
try {
leftPrev = (ToolbarConstraints)toolbars.elementAt (leftIndex - 1);
} catch (ArrayIndexOutOfBoundsException e) { }
try {
rightNext = (ToolbarConstraints)toolbars.elementAt (rightIndex + 1);
} catch (ArrayIndexOutOfBoundsException e) { }
if (leftPrev != null)
leftPrev.removeNextBar (left);
left.removePrevBar (leftPrev);
left.removeNextBar (right);
right.removePrevBar (left);
right.removeNextBar (rightNext);
if (rightNext != null)
rightNext.removePrevBar (right);
if (leftPrev != null)
leftPrev.addNextBar (right);
left.addPrevBar (right);
left.addNextBar (rightNext);
right.addPrevBar (leftPrev);
right.addNextBar (left);
if (rightNext != null)
rightNext.addPrevBar (left);
toolbars.setElementAt (left, rightIndex);
toolbars.setElementAt (right, leftIndex);
}
void trySwitchLeft (ToolbarConstraints tc) {
int index = toolbars.indexOf (tc);
if (index == 0)
return;
try {
ToolbarConstraints prev = (ToolbarConstraints)toolbars.elementAt (index - 1);
if (ToolbarConstraints.canSwitchLeft (tc.getPosition(), tc.getWidth(), prev.getPosition(), prev.getWidth())) {
switchBars (prev, tc);
}
} catch (ArrayIndexOutOfBoundsException e) { /* No left toolbar - it means tc is toolbar like Palette (:-)) */ }
}
void trySwitchRight (ToolbarConstraints tc) {
int index = toolbars.indexOf (tc);
try {
ToolbarConstraints next = (ToolbarConstraints)toolbars.elementAt (index + 1);
if (ToolbarConstraints.canSwitchRight (tc.getPosition(), tc.getWidth(), next.getPosition(), next.getWidth())) {
switchBars (tc, next);
next.setPosition (tc.getPosition() - next.getWidth() - ToolbarLayout.HGAP);
}
} catch (ArrayIndexOutOfBoundsException e) { /* No right toolbar - it means tc is toolbar like Palette (:-)) */ }
}
// void testPrinting () {
// System.out.println (" ToolbarRow [" + super.toString() + "]"); // NOI18N
// System.out.println (" Toolbars, size = " + toolbars.size()); // NOI18N
// for (int i = 0; i < toolbars.size(); i++) {
// System.out.print (" * toolbar [" + i + "] = "); // NOI18N
// ((ToolbarConstraints)toolbars.elementAt (i)).testPrinting();
// }
// }
// class WritableToolbarRow
static class WritableToolbarRow {
/**
* @associates WritableToolbar
*/
Vector toolbars;
public WritableToolbarRow () {
toolbars = new Vector();
}
public WritableToolbarRow (ToolbarRow row) {
this();
initToolbars (row);
}
void initToolbars (ToolbarRow r) {
Iterator it = r.toolbars.iterator();
while (it.hasNext()) {
toolbars.addElement (new ToolbarConstraints.WritableToolbar ((ToolbarConstraints)it.next()));
}
}
void addToolbar (ToolbarConstraints newTC) {
int index = 0;
Iterator it = toolbars.iterator();
ToolbarConstraints.WritableToolbar tc;
while (it.hasNext()) {
tc = (ToolbarConstraints.WritableToolbar)it.next();
if (newTC.getPosition() < tc.position)
break;
index++;
}
toolbars.insertElementAt (new ToolbarConstraints.WritableToolbar (newTC), index);
}
boolean isEmpty () {
return toolbars.isEmpty();
}
public String toString () {
StringBuffer sb = new StringBuffer();
sb.append (" <").append (ToolbarConfiguration.TAG_ROW).append (">\n"); // NOI18N
Iterator it = toolbars.iterator();
while (it.hasNext()) {
sb.append (it.next().toString());
}
sb.append (" </").append (ToolbarConfiguration.TAG_ROW).append (">\n"); // NOI18N
return sb.toString();
}
} // end of class WritableToolbarRow
} // end of class ToolbarRow
/*
* Log
* 4 Gandalf 1.3 1/20/00 Libor Kramolis
* 3 Gandalf 1.2 1/19/00 Libor Kramolis
* 2 Gandalf 1.1 1/16/00 Libor Kramolis
* 1 Gandalf 1.0 1/16/00 Libor Kramolis initial revision
* $
*/